package Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * JDK5之后推出的另一个特性：泛型
 * 泛型也称为参数化类型，允许我们在使用一个类是时指定它当中的属性，方法参数或返回值的类型。
 * 泛型在集合中被广泛使用，用来指定集合中的元素类型。
 * 有泛型支持的类在使用时若不指定泛型的具体类型则默认为原型Object
 */
public class TypeDemo {
    public static void main(String[] args) {
        /*
        Collection<E>
        Collection接口声明时，声明了一个泛型类型E，那么在定义一个Collection类型
        变量时可以指定这个E的实际类型
         */
        Collection<String>c =new ArrayList();
        //add（E e），add方法中参数的类型就是E，这里就相当于String类型了

        c.add("one");
        c.add("tow");
        c.add("three");
        c.add("four");
      //  c.add(12);
        /*
        在使用新循环时，可以直接用集合指定的泛型类型接收元素了
         */
        for (String s:c){
            System.out.println(s);
        }
        Iterator<String > it=c.iterator();
        while (it.hasNext()){
            String s=it.next();//E next().返回值为泛型类型，因此无需在造型。
            System.out.println(s);
        }
    }
}
